Skip to content

[One Workflow][Bug] "Enabled" toggle remains active when workflow YAML has validation errors#252698

Merged
rosomri merged 6 commits intoelastic:mainfrom
rosomri:toggle_remains_active_when_validation_errors
Feb 19, 2026
Merged

[One Workflow][Bug] "Enabled" toggle remains active when workflow YAML has validation errors#252698
rosomri merged 6 commits intoelastic:mainfrom
rosomri:toggle_remains_active_when_validation_errors

Conversation

@rosomri
Copy link
Copy Markdown
Contributor

@rosomri rosomri commented Feb 11, 2026

Summary

Fixes a bug where the "Enabled" toggle and "Run" button in the workflow detail header remained active even when the workflow YAML had validation errors.

Problem

The toggle's disabled state was driven only by selectIsYamlSyntaxValid, which uses a lenient parser (WorkflowSchemaForAutocomplete). Strict validation errors — schema violations, duplicate step names, invalid liquid templates, missing connector IDs — were produced by Monaco inside WorkflowYAMLEditor but lived as local React state, inaccessible to the sibling WorkflowDetailHeader component.

Additionally, on page refresh, Monaco hasn't mounted yet so there was no validation signal at all — even workflows the server already flagged as invalid appeared toggleable.

Before:

Screen.Recording.2026-02-11.at.12.24.09.mov

After

Screenshot 2026-02-11 at 13 52 55

Solution

  • Added hasValidationErrors: boolean to the Redux WorkflowDetailState
  • WorkflowYAMLEditor now syncs error-severity validation results to Redux via setHasValidationErrors
  • WorkflowDetailHeader computes a combined validity check:
const isValid = isSyntaxValid && !hasValidationErrors && workflow?.valid !== false;

This covers three layers:

  1. isSyntaxValid — lenient YAML parse (catches broken syntax immediately)
  2. hasValidationErrors — strict Monaco validation (catches schema errors after editor mounts)
  3. workflow?.valid !== false — server-side validation (covers initial page load before Monaco mounts)

Changes

File Change
types.ts Added hasValidationErrors field to WorkflowDetailState
slice.ts Added setHasValidationErrors reducer and initial value
selectors.ts Added selectHasValidationErrors selector
workflow_yaml_editor.tsx Syncs validation errors to Redux via useEffect
workflow_detail_header.tsx Uses combined isValid for toggle, run button, and tooltips
workflow_detail_header.test.tsx Unskipped broken test, added tests for validation errors and server-side valid flag

@rosomri rosomri added the bug Fixes for quality problems that affect the customer experience label Feb 11, 2026
@rosomri rosomri requested a review from a team as a code owner February 11, 2026 11:55
@rosomri rosomri added release_note:skip Skip the PR/issue when compiling release notes backport:version Backport to applied version labels Team:One Workflow Team label for One Workflow (Workflow automation) v9.3.0 v9.3.1 labels Feb 11, 2026
@rosomri rosomri marked this pull request as draft February 11, 2026 12:04
@rosomri rosomri marked this pull request as ready for review February 11, 2026 12:04
@elasticmachine
Copy link
Copy Markdown
Contributor

💛 Build succeeded, but was flaky

Failed CI Steps

Test Failures

  • [job] [logs] FTR Configs #96 / Synthetics API Tests PrivateLocationAPI "before all" hook for "adds a test legacy private location"

Metrics [docs]

Async chunks

Total size of all lazy-loaded chunks that will be downloaded as the user navigates the app

id before after diff
workflowsManagement 1.5MB 1.5MB +356.0B

Copy link
Copy Markdown
Contributor

@semd semd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks @rosomri 🚀

I only have one small request

highlightedStepId: undefined,
isTestModalOpen: false,
loading: initialLoadingState,
hasValidationErrors: false,
Copy link
Copy Markdown
Contributor

@semd semd Feb 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This flag is managed downstream by the schema validation of the Monaco YAML editor. Which is fine, but could we be a bit more explicit with the name?

Suggested change
hasValidationErrors: false,
hasYamlSchemaValidationErrors: false,

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done!

@rosomri rosomri enabled auto-merge (squash) February 19, 2026 10:00
@rosomri rosomri merged commit 49122fb into elastic:main Feb 19, 2026
16 checks passed
@kibanamachine
Copy link
Copy Markdown
Contributor

Starting backport for target branches: 9.3

https://github.com/elastic/kibana/actions/runs/22179623851

@kibanamachine
Copy link
Copy Markdown
Contributor

💔 All backports failed

Status Branch Result
9.3 Backport failed because of merge conflicts

Manual backport

To create the backport manually run:

node scripts/backport --pr 252698

Questions ?

Please refer to the Backport tool documentation

ersin-erdal pushed a commit to ersin-erdal/kibana that referenced this pull request Feb 19, 2026
…L has validation errors (elastic#252698)

## Summary

Fixes a bug where the "Enabled" toggle and "Run" button in the workflow
detail header remained active even when the workflow YAML had validation
errors.

### Problem

The toggle's disabled state was driven only by
`selectIsYamlSyntaxValid`, which uses a **lenient** parser
(`WorkflowSchemaForAutocomplete`). Strict validation errors — schema
violations, duplicate step names, invalid liquid templates, missing
connector IDs — were produced by Monaco inside `WorkflowYAMLEditor` but
lived as **local React state**, inaccessible to the sibling
`WorkflowDetailHeader` component.

Additionally, on page refresh, Monaco hasn't mounted yet so there was no
validation signal at all — even workflows the server already flagged as
invalid appeared toggleable.

## Before:


https://github.com/user-attachments/assets/9054859c-49cc-4918-9bbc-1aa5bfafd47c

## After
<img width="1913" height="843" alt="Screenshot 2026-02-11 at 13 52 55"
src="https://github.com/user-attachments/assets/52f34996-3682-416b-8905-54ada8c23afd"
/>

### Solution

- Added `hasValidationErrors: boolean` to the Redux
`WorkflowDetailState`
- `WorkflowYAMLEditor` now syncs error-severity validation results to
Redux via `setHasValidationErrors`
- `WorkflowDetailHeader` computes a combined validity check:
 
```
const isValid = isSyntaxValid && !hasValidationErrors && workflow?.valid !== false;
```

  This covers three layers:
1. **`isSyntaxValid`** — lenient YAML parse (catches broken syntax
immediately)
2. **`hasValidationErrors`** — strict Monaco validation (catches schema
errors after editor mounts)
3. **`workflow?.valid !== false`** — server-side validation (covers
initial page load before Monaco mounts)

### Changes

| File | Change |
|------|--------|
| `types.ts` | Added `hasValidationErrors` field to
`WorkflowDetailState` |
| `slice.ts` | Added `setHasValidationErrors` reducer and initial value
|
| `selectors.ts` | Added `selectHasValidationErrors` selector |
| `workflow_yaml_editor.tsx` | Syncs validation errors to Redux via
`useEffect` |
| `workflow_detail_header.tsx` | Uses combined `isValid` for toggle, run
button, and tooltips |
| `workflow_detail_header.test.tsx` | Unskipped broken test, added tests
for validation errors and server-side `valid` flag |
@kibanamachine kibanamachine added the backport missing Added to PRs automatically when the are determined to be missing a backport. label Feb 20, 2026
@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

semd added a commit that referenced this pull request Feb 20, 2026
…254263)

## Summary

Rolls back the `Run` button changes in this PR
#252698. Maintaining the changes
in the
`Enabled` switch.

### Screenshot

<img width="1917" height="987" alt="Captura de pantalla 2026-02-20 a les
17 46 42"
src="https://github.com/user-attachments/assets/542bc02a-2379-4b48-973c-10cf1e296bea"
/>
@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

2 similar comments
@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

29 similar comments
@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

@kibanamachine
Copy link
Copy Markdown
Contributor

Friendly reminder: Looks like this PR hasn’t been backported yet.
To create automatically backports add a backport:* label or prevent reminders by adding the backport:skip label.
You can also create backports manually by running node scripts/backport --pr 252698 locally
cc: @rosomri

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport missing Added to PRs automatically when the are determined to be missing a backport. backport:version Backport to applied version labels bug Fixes for quality problems that affect the customer experience release_note:skip Skip the PR/issue when compiling release notes Team:One Workflow Team label for One Workflow (Workflow automation) v9.3.0 v9.3.1 v9.4.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants